//package com.cloud.mall.exc;
//
//import com.fasterxml.jackson.core.JsonProcessingException;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.core.annotation.Order;
//import org.springframework.core.io.buffer.DataBufferFactory;
//import org.springframework.http.MediaType;
//import org.springframework.http.server.reactive.ServerHttpResponse;
//import org.springframework.web.server.ResponseStatusException;
//import org.springframework.web.server.ServerWebExchange;
//import reactor.core.publisher.Mono;
//
///**
// * @Author: 梁二东
// * @Date: 2024/12/4 18:58
// * @Description: gateway捕获全局异常信息方式一：GlobalErrorWebExceptionHandler
// **/
//
//@Slf4j
//@Order(-1)
//@Configuration
//@RequiredArgsConstructor
//public class GlobalErrorWebExceptionHandler implements ErrorWebExceptionHandler {
//
//    private final ObjectMapper objectMapper;
//
//    @Override
//    public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
//        ServerHttpResponse response = exchange.getResponse();
//        if (response.isCommitted()) {
//            return Mono.error(ex);
//        }
//
//        // 设置返回值类型为json
//        response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
//
//        //设置返回编码
//        if (ex instanceof ResponseStatusException) {
//            response.setStatusCode(((ResponseStatusException) ex).getStatus());
//        }
//
//        return response.writeWith(Mono.fromSupplier(() -> {
//            DataBufferFactory bufferFactory = response.bufferFactory();
//            try {
//                //writeValueAsBytes 组装错误响应结果
//                return bufferFactory.wrap(objectMapper.writeValueAsBytes(CustomException.fail(500, "网关捕获到异常", ex.getMessage())));
//            } catch (JsonProcessingException e) {
//                log.error("Error writing response", ex);
//                return bufferFactory.wrap(new byte[0]);
//            }
//        }));
//    }
//
//}
